﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SWBetongXaydung.GUI.Common;
using SWBetongXaydung.BLL;
using SWBetongXaydung.DAL;
using SWBetongXaydung.Utils;
using SWBetongXaydung.GUI.Utils;
namespace SWBetongXaydung.GUI.DuLieu
{
    public partial class UCXe : BaseUserControl
    {
        bool isAdd = true;

        private static UCXe instance = null;

        public static UCXe getInstance(DockStyle dock)
        {
            if (instance == null)
                instance = new UCXe();
            instance.Dock = dock;
            return instance;
        }
        private UCXe()
        {
            InitializeComponent();
            InitGridXe();
            LoadLoaiNhienLieu();
            LoadLoaiXe();
            InitButton();
        }
        void InitButton()
        {
            errorNotify.Clear();
            btnHieuChinh.Enabled = btnXoa.Enabled = false;
            btnThem.Enabled = true;
            btnBoQua.Visible = false;
            btnLuu.Enabled = false;
            dgXe.Enabled = true;
            txtSoXe.Enabled = false;
            chkDangSuDung.Enabled = false;
            cmbLoaiNhienLieu.Enabled = cmbLoaiXe.Enabled = false;
            LoadGridXe();
            btnThem.Focus();
        }

        void LoadLoaiNhienLieu()
        {
            cmbLoaiNhienLieu.DataSource = LoaiNhienLieuBLL.GetList();
            cmbLoaiNhienLieu.DisplayMember = "TenLoaiNhienLieu";
            cmbLoaiNhienLieu.ValueMember = "IDLoaiNhienLieu";
        }

        void LoadLoaiXe()
        {
            cmbLoaiXe.DataSource = LoaiXeBLL.GetList();
            cmbLoaiXe.DisplayMember = "TenLoaiXe";
            cmbLoaiXe.ValueMember = "IDLoaiXe";
        }

        void InitGridXe()
        {
            dgXe.AutoGenerateColumns = false;
            colSoXe.DataPropertyName = "SoXe";
            colLoaiXe.DataPropertyName = "LoaiXeStr";
            colNhienLieu.DataPropertyName = "LoaiNhienLieuStr";
            colDangSuDung.DataPropertyName = "DangSuDung";
        }

        void LoadGridXe()
        {
            bdXe.DataSource = XeBLL.GetList();
            dgXe.DataSource = bdXe;
        }

        private void bdXe_CurrentChanged(object sender, EventArgs e)
        {
            var current = bdXe.Current as Xe;
            if (current != null)
            {
                btnHieuChinh.Enabled = btnXoa.Enabled = true;
                txtSoXe.Text = current.SoXe;
                cmbLoaiNhienLieu.SelectedValue = current.IDLoaiNhienLieu;
                cmbLoaiXe.SelectedValue = current.IDLoaiXe;
                chkDangSuDung.Checked = current.DangSuDung;
            }
            else
                btnHieuChinh.Enabled = btnXoa.Enabled = false;
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            isAdd = true;
            chkDangSuDung.Checked = true;
            chkDangSuDung.Enabled = false;
            InitWhenAddOrEditPress();
            txtSoXe.Text = "";
        }

        void InitWhenAddOrEditPress()
        {
            txtSoXe.Enabled = true;
            cmbLoaiXe.Enabled = cmbLoaiNhienLieu.Enabled = true;
            btnThem.Enabled = btnHieuChinh.Enabled = btnXoa.Enabled = false;
            btnLuu.Enabled = btnBoQua.Visible = true;
            dgXe.Enabled = false;

            txtSoXe.Focus();
        }

        private void btnHieuChinh_Click(object sender, EventArgs e)
        {
            isAdd = false;
            chkDangSuDung.Enabled = true;
            InitWhenAddOrEditPress();
        }

        bool ValidateData()
        {
            errorNotify.Clear();
            if (txtSoXe.Text.IsNullOrEmpty())
            {
                errorNotify.SetError(txtSoXe, "Bạn chưa nhập số xe");
                txtSoXe.Focus();
                return false;
            }
            if (cmbLoaiXe.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbLoaiXe, "Bạn chưa chọn loại xe");
                cmbLoaiXe.Focus();
                return false;
            }
            if (cmbLoaiNhienLieu.SelectedIndex == -1)
            {
                errorNotify.SetError(cmbLoaiNhienLieu, "Bạn chưa chọn loại nhiên liệu");
                cmbLoaiNhienLieu.Focus();
                return false;
            }
            return true;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (ValidateData())
            {
                bool isSuccess = false;
                if (isAdd)
                {
                    //Thêm mới
                    Xe xe = new Xe();
                    xe.SoXe = txtSoXe.Text;
                    xe.IDLoaiXe = int.Parse(cmbLoaiXe.SelectedValue.ToString());
                    xe.IDLoaiNhienLieu = int.Parse(cmbLoaiNhienLieu.SelectedValue.ToString());
                    //xe.DangSuDung = chkDangSuDung.Checked;
                    CODE_RESULT_RETURN rs = XeBLL.Add(xe);
                    if (rs == CODE_RESULT_RETURN.TenTrung)
                    {
                        errorNotify.Clear();
                        errorNotify.SetError(txtSoXe, "Số xe này đã tồn tại");
                        txtSoXe.Focus();
                        isSuccess = false;
                        return;
                    }
                    else
                    {
                        isSuccess = true;
                    }
                }
                else
                {
                    //Cập nhật
                    var current = bdXe.Current as Xe;
                    if (current != null)
                    {
                        var xe = new Xe { SoXe = current.SoXe, IDLoaiNhienLieu = current.IDLoaiNhienLieu, IDLoaiXe = current.IDLoaiXe, DangSuDung = current.DangSuDung };
                        xe.IDLoaiXe = int.Parse(cmbLoaiXe.SelectedValue.ToString());
                        xe.IDLoaiNhienLieu = int.Parse(cmbLoaiNhienLieu.SelectedValue.ToString());
                        xe.DangSuDung = chkDangSuDung.Checked;
                        var rs = XeBLL.Update(xe);
                        if (rs == CODE_RESULT_RETURN.ThatBai)
                        {
                            isSuccess = false;
                            DialogUtils.ShowError("Cập nhật thất bại");
                            return;
                        }
                        else
                        {
                            isSuccess = true;
                        }
                    }
                }
                if (isSuccess)
                    InitButton();
            }
        }

        private void btnBoQua_Click(object sender, EventArgs e)
        {
            InitButton();
        }

        private void dgXe_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            var grid = sender as DataGridView;
            var rowIdx = (e.RowIndex + 1).ToString();

            var centerFormat = new StringFormat()
            {
                // right alignment might actually make more sense for numbers
                Alignment = StringAlignment.Center,
                LineAlignment = StringAlignment.Center
            };

            var headerBounds = new Rectangle(e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height);
            e.Graphics.DrawString(rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat);
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            var current = bdXe.Current as Xe;
            if (current != null)
            {
                if (DialogUtils.ShowYesNo("Bạn có chắc muốn xóa") == DialogResult.Yes)
                {
                    var rs = XeBLL.Delete(current.SoXe);
                    if (rs == CODE_RESULT_RETURN.ThatBai)
                        DialogUtils.ShowError("Không thể xóa xe này");
                    else
                        InitButton();
                }
            }
        }

        private void txtSoXe_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
                btnLuu.PerformClick();
        }
    }
}
